import com.estacionamientos.Direccion
import com.estacionamientos.Estacionamiento
import com.estacionamientos.Rol
import com.estacionamientos.RolService

class BootStrap {
	def estacionamientoService
	RolService rolService
	
	private static Float LATITUD_SW = -34.678309;
	private static Float LONGITUD_SW = -58.531094;
	
	private static Float LATITUD_NE = -34.544092;
	private static Float LONGITUD_NE = -58.369045;
	
    def init = { servletContext ->
		//def appCtx = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)
		
		//appCtx.estacionamientoService.crearUnDealCompletoTest()
		Double n = 0.15D; 
		Double random = 0D;
		crearRoles();
		for(int i = 0; i < 300; i++) {
			Boolean techado = i.mod(2) == 0
			Boolean atencion24Horas = false;
			random = Math.random() 
			if(random<n){
				atencion24Horas = true
			}
			crearEstacionamiento("pepe_" + i, "pepe_" + i, "cuit_" + i, "contacto_" + i, "razon_" + i, techado , "Direccion_" + i,atencion24Horas);
		}
		
		
    }
    def destroy = {
    }
	
	private crearEstacionamiento(String username, String password, String cuit, String nombreContacto,
		String razonSocial, Boolean techado, String direccion,Boolean atencion24Horas){
		Direccion dir = buildDireccion(direccion)

		Estacionamiento est = new Estacionamiento()
		est.setDireccion dir
		est.setUsername username
		est.setCuit cuit
		est.setPassword password
		est.setTechado techado
		est.setRazonSocial razonSocial
		est.setNombreContacto nombreContacto
		est.setAtencion24Horas atencion24Horas
		est.save(flush: true);
    }
		
	private Direccion buildDireccion(String direccion){
		Float latLen = LATITUD_NE - LATITUD_SW;
		Float lonLen = LONGITUD_NE - LONGITUD_SW;
		Float latitud = LATITUD_SW + latLen * Math.random()
		Float longitud = LONGITUD_SW + lonLen * Math.random()
		Direccion dir = new Direccion();
		dir.setDireccion direccion
		dir.setLatitud latitud
		dir.setLongitud longitud
		dir.save(flush: true);
		return dir;
	}
	
	private void crearRoles(){
		Rol rol = new Rol("authority":"ESTACIONAMIENTO_ROL");
		rolService.createMethod(rol);
		rol = new Rol("authority":"USUARIO_ROL");
		rolService.createMethod(rol);
	}
}
